package dao

import (
	"gorm.io/gorm"
	"log"
	"lottery/models"
)

type BlackipDao struct {
	engine *gorm.DB
}

// 公共方法，实例化方法
func NewBlackipDao(engine *gorm.DB) *BlackipDao {
	return &BlackipDao{
		engine: engine,
	}
}

// 查找单一值
func (d *BlackipDao) Get(id int) (*models.LtBlackIp, bool) {
	data := &models.LtBlackIp{}
	// 查询数据
	err := d.engine.First(&data, id).Error
	if err != nil { // 未获取到，得到的是空对象
		return data, false
	}
	return data, true
}

// 查找全部
func (d *BlackipDao) GetAll(page, size int) ([]models.LtBlackIp, bool) {
	offset := (page - 1) * size
	datalist := make([]models.LtBlackIp, 0)
	// 返回所有数据，按照状态和 删除
	err := d.engine.Order("id desc").Limit(size).Offset(offset).
		Find(&datalist).Error
	if err != nil { // 错误了，写个日志
		log.Println("gift_dao.GetAll error = ", err.Error())
		return datalist, false
	}
	return datalist, true
}

// 查找总数
func (d *BlackipDao) CountAll() int64 {
	var num int64
	d.engine.Table("lt_gifts").Count(&num)
	return num
}

// 删除操作不做物理删除， 逻辑删除，更新字段
func (d *BlackipDao) Delete(id int) error {
	data := &models.LtBlackIp{Id: id}
	err := d.engine.Model(&data).
		Update("sys_status", 1).Error

	return err
}

// 更新操作: 针对传入的指定 columns，字段名，进行查询
func (d *BlackipDao) Update(data *models.LtBlackIp, columns []string) error {
	err := d.engine.Model(data).Debug().Select(columns).Updates(data).Error
	return err
}

// 执行创建操作
func (d *BlackipDao) Create(data *models.LtBlackIp) error {
	err := d.engine.Create(data).Error
	return err
}

// 获取 ip
func (d *BlackipDao) GetByIp(ip string) *models.LtBlackIp {
	datalist := make([]models.LtBlackIp, 0)
	err := d.engine.Where("ip = ?", ip).Limit(1).Find(&datalist).Error
	if err != nil || len(datalist) < 1 { // 查询失败，查不出数据都是返回 nil
		return nil
	}

	return &datalist[0]
}
